/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.kuncipenyusunananggaran;

import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;

import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author Daud_HS
 */
public class KunciPenyusunanAnggaranWnd extends ClassApplicationModule {

    private Textbox txtboxTahunAnggaran;
    private Textbox txtboxUnitKerja;
    private Textbox txtboxJenisAnggaran;
    private Textbox txtboxStatusKunci;
    private Listbox lstboxKunciPenyusunanAnggaran;
    private Button btnTambah;
    private Button btnSimpan;
    private Listbox lstboxKunci;
    private KunciPenyusunanAnggaranDAO kunciPenyusunanAnggaranDAO;
    private Label lblTahunAnggaran;
    private int unitKerja = 0;
    private int jenisBiaya = 0;
    private int kunci = 0;
    private Listbox lstboxKunciPenyusunanAnggaranDetail;
    private Combobox cmbboxJenisAnggaran;
    private ClassSession session;
    private Radio rdAwal;
    private Radio rdRevisi;
    private Radio rdDikunci;
    private Radio rdTidakDikunci;
    private int kodeJenis;

    public KunciPenyusunanAnggaranWnd() {
        kunciPenyusunanAnggaranDAO = new KunciPenyusunanAnggaranDAOImpl();
    }

    public void onCreate() throws Exception {
        lstboxKunciPenyusunanAnggaran = (Listbox) getFellow("lstboxKunciPenyusunanAnggaran");
        lstboxKunciPenyusunanAnggaranDetail = (Listbox) getFellow("lstboxKunciPenyusunanAnggaranDetail");
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        cmbboxJenisAnggaran = (Combobox) getFellow("cmbboxJenisAnggaran");
        rdAwal = (Radio) getFellow("rdAwal");
        rdRevisi = (Radio) getFellow("rdRevisi");
        rdDikunci = (Radio) getFellow("rdDikunci");
        rdTidakDikunci = (Radio) getFellow("rdTidakDikunci");
        session = new ClassSession("2009", "");
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        load();
        loadCmbBoxJenisAnggaran();
    }

    public void loadCmbBoxJenisAnggaran() {
        cmbboxJenisAnggaran.getItems().clear();
        for (Map map : kunciPenyusunanAnggaranDAO.getJenisAnggaran()) {
            Comboitem item = new Comboitem();
            item.setValue(map);
            item.setLabel(map.get("jenisBiaya").toString());
            cmbboxJenisAnggaran.appendChild(item);
        }
    }

    public void load() throws Exception {
        lstboxKunciPenyusunanAnggaran.getItems().clear();
        int no = 1;
        for (final Map kunciPenyusunanaAnggaran : kunciPenyusunanAnggaranDAO.list()) {
            Listitem item = new Listitem();
            item.setValue(kunciPenyusunanaAnggaran);
            item.appendChild(new Listcell("" + no++));
            Listcell cellUnitKerja = new Listcell();
            Label lblUnitKerja = new Label();
            lblUnitKerja.setId("unitKerja" + unitKerja++);
            lblUnitKerja.setValue(kunciPenyusunanaAnggaran.get("Nama_unit_kerja").toString());
            cellUnitKerja.appendChild(lblUnitKerja);
            item.appendChild(cellUnitKerja);
            String statusKunci = (String) kunciPenyusunanaAnggaran.get("isDikunci");

            lstboxKunciPenyusunanAnggaran.appendChild(item);
        }
    }

    public void loadData() throws Exception {
        load();
    }

    public void btnSalinOnClick() throws Exception {
        Integer tahunAwal = Integer.valueOf(session.getThnAnggaran());
        Integer tahunSebelumya = tahunAwal - 1;
        System.out.println(tahunSebelumya);
        List<Map> result = kunciPenyusunanAnggaranDAO.getTahunSebelumnya(Integer.toString(tahunSebelumya));

        for (Map map : result) {
            KunciPenyusunanAnggaran anggaran = new KunciPenyusunanAnggaran();
            anggaran.setTahunAnggaran(session.getThnAnggaran());
            anggaran.setkodeUnit(map.get("kodeUnit").toString());
            anggaran.setisDikunci(map.get("isDikunci").toString());
            anggaran.setisRevisi(map.get("isRevisi").toString());
            anggaran.setkodeJenisAnggaran(Integer.valueOf(map.get("kodeJenisAnggaran").toString()));
            kunciPenyusunanAnggaranDAO.insert(anggaran);
            load();
        }

    }

    public void loadDetailData() throws Exception {
        lstboxKunciPenyusunanAnggaranDetail.getItems().clear();
        int no = 1;
        for (final Map kunciPenyusunanaAnggaran : kunciPenyusunanAnggaranDAO.getByJenisBiaya(kodeJenis)) {
            Listitem item = new Listitem();
            item.setValue(kunciPenyusunanaAnggaran);
            item.appendChild(new Listcell("" + no++));
            Listcell cellUnitKerja = new Listcell();
            Label lblUnitKerja = new Label();
            lblUnitKerja.setId("unitKerja" + unitKerja++);
            lblUnitKerja.setValue(kunciPenyusunanaAnggaran.get("Nama_unit_kerja").toString());
            cellUnitKerja.appendChild(lblUnitKerja);
            item.appendChild(cellUnitKerja);
            Listcell cellJenisBiaya = new Listcell();
            Label lblJenisBiaya = new Label();
            lblJenisBiaya.setId("jenisBiaya" + jenisBiaya++);
            String statusJenisBiaya = kunciPenyusunanaAnggaran.get("jenisBiaya").toString();
            if (kunciPenyusunanaAnggaran.get("isRevisi").toString().equalsIgnoreCase("Y")) {
                lblJenisBiaya.setValue(statusJenisBiaya + "-Revisi");
            } else {
                lblJenisBiaya.setValue(statusJenisBiaya + "- Awal");
            }
            cellJenisBiaya.appendChild(lblJenisBiaya);
            item.appendChild(cellJenisBiaya);
            String statusKunci = (String) kunciPenyusunanaAnggaran.get("isDikunci");
            Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
            if (statusKunci.equalsIgnoreCase("y")) {
                toolbarbtnUbah.setLabel("[dikunci]");
            } else {
                toolbarbtnUbah.setLabel("[tidak dikunci]");
            }
            toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    final Window win = (Window) Executions.createComponents("sippzul/kuncipenyusunananggaran/EditKunciPenyusunanAnggaran.zul", getRoot(), null);
                    Label lblStatusKunciSekarang = (Label) win.getFellow("lblStatusKunciSekarang");
                    Label lblTahunAnggaran = (Label) win.getFellow("lblTahunAnggaran");
                    lblTahunAnggaran.setValue(kunciPenyusunanaAnggaran.get("tahunAnggaran").toString());
                    Textbox txtboxKodeUnitKerja = (Textbox) win.getFellow("txtboxKodeUnitKerja");
                    txtboxKodeUnitKerja.setValue(kunciPenyusunanaAnggaran.get("kodeUnit").toString());
                    Label lblUnitKerja = (Label) win.getFellow("lblUnitKerja");
                    lblUnitKerja.setValue(kunciPenyusunanaAnggaran.get("Nama_unit_kerja").toString());
                    Label lblJenisAnggaran = (Label) win.getFellow("lblJenisAnggaran");
                    lblJenisAnggaran.setValue(kunciPenyusunanaAnggaran.get("jenisBiaya").toString());
                    Textbox txtboxIdJenisAnggaran = (Textbox) win.getFellow("txtboxIdJenisAnggaran");
                    txtboxIdJenisAnggaran.setValue(kunciPenyusunanaAnggaran.get("kodeJenisAnggaran").toString());
                    Label lblStatus = (Label) win.getFellow("lblStatus");
                    if (kunciPenyusunanaAnggaran.get("isRevisi").toString().equalsIgnoreCase("Y")) {
                        lblStatus.setValue("Revisi");
                    } else {
                        lblStatus.setValue("Awal");
                    }
                    Radio rdbtnDikunci = (Radio) win.getFellow("rdbtnDikunci");
                    Radio rdbtnTidakDikunci = (Radio) win.getFellow("rdbtnTidakDikunci");
                    if (kunciPenyusunanaAnggaran.get("isDikunci").toString().equalsIgnoreCase("Y")) {
                        lblStatusKunciSekarang.setValue("dikunci");
                        rdbtnDikunci.setChecked(true);
                    } else {
                        lblStatusKunciSekarang.setValue("tidak dikunci");
                        rdbtnTidakDikunci.setChecked(true);
                    }
                    win.setPosition("center");
                    win.doModal();
                }
            });
            Listcell listcell = new Listcell();
            listcell.appendChild(toolbarbtnUbah);
            item.appendChild(listcell);
            lstboxKunciPenyusunanAnggaranDetail.appendChild(item);
        }
    }

    public void cmbboxJenisAnggaranOnSelect() throws Exception {
        Map map = (Map) cmbboxJenisAnggaran.getSelectedItem().getValue();
        kodeJenis = Integer.valueOf(map.get("kodeJenisBiaya").toString());
        loadDetailData();
    }

    public void lstboxKunciPenyusunanAnggaranDetailOnSelect() {
        Map map = (Map) lstboxKunciPenyusunanAnggaranDetail.getSelectedItem().getValue();
        if (map.get("isRevisi").toString().equalsIgnoreCase("Y")) {
            rdRevisi.setChecked(true);
        } else {
            rdAwal.setChecked(true);
        }
        if (map.get("isDikunci").toString().equalsIgnoreCase("Y")) {
            rdDikunci.setChecked(true);
        } else {
            rdTidakDikunci.setChecked(true);
        }

    }
}
